﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Capa_Negocio;
using System.Data;
using System.Data.Entity;
using Capa_Datos;
using System.Data.Objects;

namespace Capa_Negocio
{
    public class ModuloCN
    {
        #region Operaciones de mantenimiento
        public int Altamodulo(modulo oModulo, ciclo oCiclo)
        {
            //hacemos nuestra conexion
            using (ProyectoCIFP oCon = new ProyectoCIFP())
            {// a la hora de hacer el alte tendremos que controlar que exite la familia dada en el alta
                oCon.AddTomodulo(oModulo);
                /****************Para la relacion tienen modulo
                if (oCiclo != null)//si no han pasado un ciclo lo enlazamos... creamos la relacion en la tabla tienen_modulo?
                //Posible modificacion para que se le pase una lista?
                {

                    ciclo aux = (from c in oCon.ciclo where c.Nombre == oCiclo.Nombre select c).First();
                    oModulo.ciclo.Add(aux);
                }*/
                
                return oCon.SaveChanges();
            }
        }
        public int Bajamodulo(modulo oModulo)
        {
            using (ProyectoCIFP oCon = new ProyectoCIFP())
            {////Tampoco podran borrar modulos que este asociados a ciclos
                modulo borrar = (from m in oCon.modulo where m.Id_modulo == oModulo.Id_modulo select m).First();
                //modulo bor = (from c in oCon.ci .modulo where m.Id_modulo == oModulo.Id_modulo select m).First();
                oCon.DeleteObject(borrar);
                return oCon.SaveChanges();
            }
        }
        public int Modimodulo(modulo oModulo, ciclo oCiclo)
        {
            using (ProyectoCIFP oCon = new ProyectoCIFP())
            {//Aqui solo vamos a modificar los datos pertinentes al modulo es si no sus relaciones
                modulo modificar = (from m in oCon.modulo where m.Id_modulo == oModulo.Id_modulo select m).First();
                modificar.Nombre = oModulo.Nombre;
                modificar.Curso = oModulo.Curso;
                
               // if (oCiclo != null)//miramos a ver si nos han pasado un ciclo y lo enlazamos... nono
                 //   oModulo.ciclo.Add(oCiclo);
                return oCon.SaveChanges();
            }
        }
        #endregion
        #region Operaciones de filtrado
        public List<modulo> General(modulo oModulo)
        {
            using (ProyectoCIFP oCon = new ProyectoCIFP())
            {
                IQueryable<modulo> general = from m in oCon.modulo select m;
                if (oModulo.Nombre != "")
                {
                    IQueryable<modulo> nom = from m in oCon.modulo where m.Nombre.Contains(oModulo.Nombre) select m;
                    general = general.Intersect(nom);
                }
                if (oModulo.Curso != 0)
                {
                    IQueryable<modulo> cur = from m in oCon.modulo where m.Curso == oModulo.Curso select m;
                    general = general.Intersect(cur);
                }
                //Ampliar atraves de las propiedades de navegacion ??
                return general.ToList();
            }
        }
        #endregion 
        #region Procesos privados
        #endregion

    }
}
